package com.cmeduSystem.webadmin.app.model;

import com.baomidou.mybatisplus.annotation.*;
import com.cmeduSystem.common.core.annotation.*;
import lombok.Data;

import java.util.Date;

/**
 * 工单信息实体对象。
 *
 * @author xulei
 * @date 2025-09-04
 */
@Data
@TableName(value = "ticket_info")
public class TicketInfo {

    /**
     * 工单ID（主键）。
     */
    @TableId(value = "id")
    private Long id;

    /**
     * 工单编号（如“CS-2024-09-000001”）。
     */
    @AutoCodeField(prefix = "CS", precisionTo = "DAYS", idWidth = 6)
    @TableField(value = "ticket_no")
    private String ticketNo;

    /**
     * 业务类型ID（关联ticket_business_type表）。
     */
    @TableField(value = "business_type_id")
    private Long businessTypeId;

    /**
     * 工单标题。
     */
    @TableField(value = "title")
    private String title;

    /**
     * 工单描述（问题详情）。
     */
    @TableField(value = "description")
    private String description;

    /**
     * 请求人ID（关联sys_user表；若为外部客户，关联customer表）。
     */
    @UserFilterColumn
    @TableField(value = "requester_id")
    private Long requesterId;

    /**
     * 请求人类型：1-内部员工，2-外部客户。
     */
    @TableField(value = "requester_type")
    private Integer requesterType;

    /**
     * 优先级：1-紧急，2-普通，3-低。
     */
    @TableField(value = "priority")
    private Integer priority;

    /**
     * 工单状态：1-新建，2-待分配，3-处理中，4-待反馈，5-待审核，6-已解决，7-已关闭。
     */
    @TableField(value = "status")
    private Integer status;

    /**
     * 处理人ID（关联sys_user表）。
     */
    @TableField(value = "processor_id")
    private Long processorId;

    /**
     * 处理部门ID（关联sys_dept表）。
     */
    @TableField(value = "dept_id")
    private Long deptId;

    /**
     * 预计解决时间。
     */
    @TableField(value = "expect_solve_time")
    private Date expectSolveTime;

    /**
     * 实际解决时间（状态变为“已解决”时自动填充）。
     */
    @TableField(value = "actual_solve_time")
    private Date actualSolveTime;

    /**
     * 关闭原因（仅状态为“已关闭”时填写）。
     */
    @TableField(value = "close_reason")
    private String closeReason;

    /**
     * 创建时间。
     */
    @TableField(value = "create_time")
    private Date createTime;

    /**
     * 更新时间。
     */
    @TableField(value = "update_time")
    private Date updateTime;

    /**
     * 创建人。
     */
    @TableField(value = "create_user_id")
    private Long createUserId;

    /**
     * 更新人。
     */
    @TableField(value = "update_user_id")
    private Long updateUserId;
}
